
package GUI;

import javax.imageio.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;

/**
 * La classe ImageFond insere une image de fond dans l'onglet de conversation
 * entre deux utilisateurs
 * 
 * @author      Frank Djomo
 * @author      Christelle SIAGO HAPPI
 * @author      djomopoueme@gmail.com
 * @author      christelle.siagohappi@gmail.com
 * @version     1.0
 */
//TODO Ajouter scrollPanne +  texte
public class ImageFond extends JPanel{

    private static final long serialVersionUID = 2724980460740151616L;

    private Image image;
    private int x ;
    private int y;
    private boolean bAutoSize; 
    private boolean bKeepAspect;
    private String  text ;
    private int pos;
    private Color color ;

    /**
    * Cree ImageFond  à partir d'un fichier
    * @param  file      Fichier reprensentant l'image à inserer
    * @param  x         Abscisses 
    * @param  y         Ordonnées
    * @param  autosize  <code>true</code> Pour redimensionner l'image
    *                   <code>false</code> sinon
    * @param  keepAspect
    */
    public ImageFond(File file,int x,int y, boolean autosize, boolean keepAspect) throws IOException {
        
            super();
            setImage(ImageIO.read(file));
            setX(x);
            setY(y);
            setAutoSize(autosize);
            setKeepAspect(keepAspect);
            
            pos=0;
    }
     /**
    * Cree ImageFond  à partir d'un fichier
    * @param  file      Fichier reprensentant l'image à inserer
    * @param  x         Abscisses 
    * @param  y         Ordonnées
    * @param  autosize  <code>true</code> Pour redimensionner l'image
    *                   <code>false</code> sinon
    * @see Component
    */
    public ImageFond(File file, int x, int y, boolean autosize) throws IOException {
            this(file, x, y, true, false);
    }
    /**
    * Cree ImageFond  à partir d'un fichier
    * @param  file      Fichier reprensentant l'image à inserer
    * @param  x         Abscisses 
    * @param  y         Ordonnées
    */
    public ImageFond(File file, int x, int y) throws IOException {
            this(file, x, y, true);
    }
    /**
    * Cree ImageFond  à partir d'un fichier
    * @param  file      Fichier reprensentant l'image à inserer
    */
    public ImageFond(File file) throws IOException {
            this(file, 0, 0, true);
    }
    /**
    * Cree ImageFond  à partir d'une image
    * @param  image     Image à inserer
    * @param  x         Abscisses 
    * @param  y         Ordonnées
    * @param  autosize  <code>true</code> Pour redimensionner l'image
    *                   <code>false</code> sinon
    * @param  keepAspect
    */
    public ImageFond(Image image, int x, int y, boolean autosize, boolean keepAspect) {
            super();

            setImage(image);
            setX(x);
            setY(y);
            setAutoSize(autosize);
            setKeepAspect(keepAspect);
            pos=0;
    }
    /**
    * Cree ImageFond  à partir d'une image
    * @param  image     Image à inserer
    * @param  x         Abscisses 
    * @param  y         Ordonnées
    * @param  autosize  <code>true</code> Pour redimensionner l'image
    *                   <code>false</code> sinon
    */
    public ImageFond(Image image, int x, int y, boolean autosize) {
            this(image, x, y, true, false);
    }
 /**
    * Cree ImageFond  à partir d'une image
    * @param  image     Image à inserer
    * @param  x         Abscisses 
    * @param  y         Ordonnées
    */
    public ImageFond(Image image, int x, int y) {
            this(image, x, y, true);
    }
    /**
    * Cree ImageFond  à partir d'une image
    * @param  image     Image à inserer
    */
    public ImageFond(Image image) {
            this(image, 0, 0, true);
    }
    /**
    * Cree ImageFond  vide
    */
    public ImageFond() {
            super();
            setX(0);
            setY(0);
            setImage(null);
            setAutoSize(false); pos=0;
            
    }

    private void setImage(Image image) {
            this.image = image;
    }



    private void setAutoSize(boolean autoSize) {
            bAutoSize = autoSize;
    }

    private void setKeepAspect(boolean keepAspect) {
            bKeepAspect = keepAspect;
    }

    public void setColor(Color color) {
        this.color = color;
    }

    public void setText(String text) {
        this.text = text;
    }

    private void setX(int x) {
		this.x = x;
    }
	
    private void setY(int y) {
		this.y = y;
    } 
    @Override
    public void paintComponent(Graphics g) {
            super.paintComponent(g);
            
            if (image != null) {
                    if (!bAutoSize) {
                            g.drawImage(image, x, y, image.getWidth(null), image.getHeight(null), null);
                            
                    }
                    else {
                            Graphics2D g2d = (Graphics2D) g;
                            Double scaleWidth = new Double(getWidth()) / new Double(image.getWidth(null));
                            Double scaleHeight = new Double(getHeight()) / new Double(image.getHeight(null));
                            if (bKeepAspect) {
                                    if (scaleWidth > scaleHeight) {
                                            scaleWidth = scaleHeight;
                                    }
                                    else {
                                            scaleHeight = scaleWidth;
                                    }
                            }
                            g2d.scale(scaleWidth, scaleHeight);
                            g2d.drawImage(image, x, y, null);
                    }
                    if(text != null) {
                        g.setFont(new Font("Monospaced", Font.ITALIC, 20));
                        g.setColor(color);
			g.drawString(text, 20, 50+pos);
                        g.drawString("\n", 20, 50+pos);
                        pos+=20;
                        
		    }
            }
    }

}

